package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.common.constant.RedisConst;
import com.atguigu.gmall.product.eneity.SkuAttrValue;
import com.atguigu.gmall.product.eneity.SkuImage;
import com.atguigu.gmall.product.eneity.SkuSaleAttrValue;
import com.atguigu.gmall.product.service.SkuAttrValueService;
import com.atguigu.gmall.product.service.SkuImageService;
import com.atguigu.gmall.product.service.SkuSaleAttrValueService;
import com.atguigu.gmall.product.vo.SaveSkuInfoVo;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.atguigu.gmall.product.eneity.SkuInfo;
import com.atguigu.gmall.product.service.SkuInfoService;
import com.atguigu.gmall.product.mapper.SkuInfoMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 *
 */
@Service
public class SkuInfoServiceImpl extends ServiceImpl<SkuInfoMapper, SkuInfo>
    implements SkuInfoService{


    @Autowired
    SkuAttrValueService skuAttrValueService;

    @Autowired
    SkuSaleAttrValueService skuSaleAttrValueService;

    @Autowired
    SkuImageService skuImageService;

    @Autowired
    StringRedisTemplate stringRedisTemplate;
    /**
     * 添加一个skuInfo
     * @param saveSkuInfoVo
     */
    @Override
    public void saveSkuInfo(SaveSkuInfoVo saveSkuInfoVo) {

        //1.添加到sku_info
        SkuInfo skuInfo = new SkuInfo();
        BeanUtils.copyProperties(saveSkuInfoVo,skuInfo);
        save(skuInfo);
        Long skuId = skuInfo.getId();
        //2.添加到sku_attr_value
        List<SkuAttrValue> skuAttrValueList = saveSkuInfoVo.getSkuAttrValueList().stream().map(item -> {

            SkuAttrValue skuAttrValue = new SkuAttrValue();
            BeanUtils.copyProperties(item, skuAttrValue);
            skuAttrValue.setSkuId(skuId);
            return skuAttrValue;
        }).collect(Collectors.toList());
        skuAttrValueService.saveBatch(skuAttrValueList);

        //3.添加到sku_sale_attr_value
        List<SkuSaleAttrValue> skuSaleAttrValueList = saveSkuInfoVo.getSkuSaleAttrValueList().stream().map(item -> {

            SkuSaleAttrValue skuSaleAttrValue = new SkuSaleAttrValue();
            BeanUtils.copyProperties(item, skuSaleAttrValue);
            skuSaleAttrValue.setSpuId(saveSkuInfoVo.getSpuId());
            skuSaleAttrValue.setSkuId(skuId);
            return skuSaleAttrValue;
        }).collect(Collectors.toList());
        skuSaleAttrValueService.saveBatch(skuSaleAttrValueList);

        //4.添加到sku_image
        List<SkuImage> skuImageList = saveSkuInfoVo.getSkuImageList().stream().map(item -> {

            SkuImage skuImage = new SkuImage();
            BeanUtils.copyProperties(item, skuImage);
            skuImage.setSkuId(skuId);
            return skuImage;
        }).collect(Collectors.toList());
        skuImageService.saveBatch(skuImageList);

        stringRedisTemplate.opsForValue().setBit(RedisConst.SKUID_BITMAP,skuId,true);
    }
}




